package com.zhiche.lisa.lspm.dao.mapper.lsp;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.zhiche.lisa.lspm.dao.model.lsp.LspInfo;
import com.zhiche.lisa.lspm.dao.model.lsp.bo.AfterAuthLspLineBO;
import com.zhiche.lisa.lspm.dao.model.lsp.bo.LspAuthLineBO;
import com.zhiche.lisa.lspm.dao.model.lsp.bo.LspBlackBO;
import com.zhiche.lisa.lspm.vo.lsp.LspBasicVO;
import com.zhiche.lisa.lspm.vo.lsp.*;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * <p>
 * 承运商 Mapper 接口
 * </p>
 *
 * @author qichao
 * @since 2018-05-23
 */
public interface LspInfoMapper extends BaseMapper<LspInfo> {

    /**
     * 承运商基础信息列表
     * @param page
     * @param ew
     * @return
     */
    List<LspBasicVO> lspInfoLine(Page<LspInfoLineVO> page, @Param("ew") Wrapper<LspInfoLineVO> ew);

    /**
     * 承运商拉黑列表
     * @param page
     * @param ew
     * @return
     */
    List<LspBlackLineVO> lspBlackLine(Page<LspBlackBO> page, @Param("ew") Wrapper<LspBlackBO> ew);

    Integer lspInBlack(@Param("lspId")Integer lspId, @Param("inlistTime")Date inlistTime, @Param("reason")String reason);
    Integer lspOutBlack(@Param("lspId")Integer lspId, @Param("outlistTime")Date inlistTime, @Param("reason")String reason);
    /**
     * 承运商认证列表
     * @param page
     * @param ew
     * @return
     */
    List<LspAuthLineVO> lspAuthLine(Page<LspAuthLineBO> page,
                                    @Param("ew") Wrapper<LspAuthLineBO> ew);

    /**
     * 认证的承运商列表
     * @param page
     * @param ew
     * @return
     */
    List<AfterAuthLspLineVO> afterAuthLspLine(Page<AfterAuthLspLineBO> page,
                                              @Param("ew") Wrapper<AfterAuthLspLineBO> ew);

    /**
     * 根据 id 批量更新状态
     * @param authStatus
     * @param idList
     */
    void batchUpdateStatus(@Param("authStatus") Integer authStatus, @Param("status") Integer status, @Param("idList") List<Long> idList);

    /**
     * 根据名称和简称查询承运商，不进行租户过滤
     * @param ew
     * @return
     */
    List<LspInfo> selectListNoTenant(@Param("ew") Wrapper<LspInfo> ew);


    /**
     *开通账号列表
     * @param page
     * @param ew
     * @return
     */
    List <LspAccountVO> openAccountList(Page<LspAccountVO> page, @Param("ew") Wrapper<LspAccountVO> ew);

    /**
     * 恢复删除状态
     */
    void updateDeleteStatus(@Param("ew") Wrapper<LspInfo> ew);

    LspInfo selectByIdNoTenant(@Param("id") Long lspId);


    LspInfo selectLspInfoByDriverId(@Param("id") Long id);
}
